import 'package:casdon/modules/lifeCircle/application/notification/life_blogger_info_notifier.dart';
import 'package:casdon/modules/lifeCircle/application/notification/life_topic_search_notifier.dart';
import 'package:casdon/modules/lifeCircle/domain/usecase/life_topic_list_usecase.dart';
import 'package:casdon/modules/lifeCircle/providers/life_provider.dart';
import 'package:casdon/modules/lifeCircle/providers/life_search_providers.dart';
import 'package:casdon/modules/me/application/notification/flower_list_notifier.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

/// 统一的关注状态同步服务
/// 用于同步所有相关列表中的关注状态
class FollowStatusSyncService {
  final WidgetRef ref;

  FollowStatusSyncService(this.ref);

  /// 更新所有相关列表中的指定用户的关注状态
  /// [userId] 被关注的用户ID
  /// [isFollowed] 新的关注状态
  void syncFollowStatus(String userId, bool isFollowed) {
    // 1. 更新推荐列表中的所有相关 topic
    _updateTopicFollowStatusInList(
      LifeTopicListUsecase.recommendSubjectId,
      userId,
      isFollowed,
    );

    // 2. 更新关注列表中的所有相关 topic
    _updateTopicFollowStatusInList(
      LifeTopicListUsecase.followSubjectId,
      userId,
      isFollowed,
    );

    // 3. 更新所有主题列表中的相关 topic
    try {
      final lifeHomeState = ref.read(lifeTabControllerNotifierProvider);
      final subjects = lifeHomeState.valueOrNull?.data ?? [];
      for (final subject in subjects) {
        _updateTopicFollowStatusInList(subject.id, userId, isFollowed);
      }
    } catch (e) {
      debugPrint("同步主题列表状态失败: $e");
    }

    // 4. 用户帖子列表不需要更新关注状态（因为不显示关注按钮）
    // 已移除对 LifeUserTopicListNotifier 的关注状态更新

    // 5. 更新搜索结果列表中的关注状态
    _updateSearchFollowStatus(userId, isFollowed);

    // 6. 更新关注列表（FlowerListNotifier，
    try {
      final flowerNotifier = ref.read(flowerListNotifierProvider.notifier);
      flowerNotifier.updateFlowerFollowStatus(userId, isFollowed);
    } catch (e) {
      debugPrint("更新关注列表状态失败: $e");
    }

    // 7. 更新用户博主信息（LifeBloggerInfoNotifier）- 只有当 userId 匹配时才更新
    // 注意：需要传入具体的 userId 来匹配
    try {
      final bloggerNotifier = ref.read(
        lifeBloggerInfoNotifierProvider.notifier,
      );
      bloggerNotifier.updateFollowStatus(userId, isFollowed);
    } catch (e) {
      debugPrint("更新博主信息状态失败: $e");
    }
  }

  /// 更新指定列表中的所有相关 topic 的关注状态
  void _updateTopicFollowStatusInList(
    String subjectId,
    String userId,
    bool isFollowed,
  ) {
    try {
      final notifier = ref.read(
        lifeTopicListNotifierProvider(subjectId).notifier,
      );
      final state = ref.read(lifeTopicListNotifierProvider(subjectId));
      final topicData = state.valueOrNull?.data;

      if (topicData != null) {
        // 找到所有属于该用户的 topic 并更新
        for (final topic in topicData) {
          if (topic.userId == userId) {
            notifier.updateTopicFollowStatus(topic.id, isFollowed);
          }
        }
      }
    } catch (e) {
      // 该 subjectId 的 provider 可能不存在或未初始化，跳过
      debugPrint("更新列表 $subjectId 状态失败: $e");
    }
  }

  void _updateSearchFollowStatus(String userId, bool isFollowed) {
    try {
      final keyword = ref.read(lifeSubmittedKeywordProvider);
      if (keyword.isEmpty) {
        return;
      }
      final notifier = ref.read(
        lifeTopicSearchProvider(keyword).notifier,
      );
      notifier.updateFollowStatusByUser(userId, isFollowed);
    } catch (e) {
      debugPrint("更新帖子搜索列表状态失败: $e");
    }
  }
}
